| body% - физическое тело vx#, vy#, vz# - вектор приложения силы mode% - тип силы |
| Прикладывает к центру тяжести тела силу в глобальной системе координат. Mode - может принимать только целые значения от 0 до 5. 0 - прикладывает просто силу, имеет единицу измерения масса*дистанция/время^2. 1 - прикладывает импульс, имеет единицу измерения масса*дистанция/время. 2 - изменение скорости, имеет единицу измерения дистанция/время. 3 - сглаженный импульс (SMOOTH IMPULSE ), используется в конкретных случаях. 4 - сглаженное изменение скорости (SMOOTH VELOCITY CHANGE), используется в конкретных случаях. 5 - ускорение, имеет единицу измерения дистанция/время^2. Внимание - силу нельзя прикладывать к статическим (с массой 0) и управляемым телам. |
| pxAddLocalForce Команды группы: pxAddForceAtLocalPos, pxAddForceAtPos |
|
;Пример применения функции ;pxAddForce ;в примере нам понадобится несколько однотипных тел Type Px_Cylinder Field body% Field mesh% End Type Graphics3D 800, 600, 32, 2 SetBuffer BackBuffer() ;Создаем физический мир, устанавливаем гравитацию. pxCreateWorld(1) ;У нас будет поверхость pxSetGravity(0, -10, 0) camera=CreateCamera() light=CreateLight() PositionEntity camera,0,20,-40 RotateEntity camera,30,0,0 plane=CreatePlane() ;Физуализируем поверхость EntityColor plane,0,100,200 EntityAlpha plane,0.5 mir = CreateMirror () ;Чуть украсим зеркалом ;Добавим объектов к сцене For n = 1 to Rnd(10,40) ocu.Px_Cylinder = New Px_Cylinder ocu\mesh = CreateCylinder() ;Создаем визуальное отображение ScaleEntity ocu\mesh,1,3,1 ;зададим размер EntityColor ocu\mesh,Rand(0,255), Rand(0,255), Rand(0,255) ;и цвет ocu\body=pxCreateCylinder( 1, 3, 8, 1) ;Создаем физический объект pxSetPosition(ocu\body,Rand(-20,20),40,Rand(-10,30)) ;размещаем случайным образом pxSetRotation(ocu\body,Rand(-50,50),Rand(-50,50),Rand(-50,50)) Next body1 = pxCreateCube( 1, 1, 1, 20) pxSetPosition(body1,0,3,0) mesh1 = CreateCube() EntityColor mesh1,255, 0, 0 body2 = pxCreateCube( 1, 1, 1, 20) pxSetPosition(body2,0,9,0) mesh2 = CreateCube() ;Создаем соединение "спица" pxJCreateCylindrical(body1, body2, 0, 6, 0, 0, 1, 0, -20, 20) ;Создаем пружину pxCreateSpringAndDamperEffector(body1, body2) mode% = 0 ;Поиграем с типом силы Force# = 2000 ; сила с которой будем давить ;Основной цикл программы While Not KeyDown(1) ;Пока не нажат ESC RenderPhysic(60,0) ; ------------ Применяем pxAddForce ;Применяем силы в зависимости от нажатой клавиши If KeyDown(200) pxAddForce(body1,0,0,Force,mode) If KeyDown(208) pxAddForce(body1,0,0,-Force,mode) If KeyDown(205) pxAddForce(body1,Force,0,0,mode) If KeyDown(203) pxAddForce(body1,-Force,0,0,mode) If KeyHit(57) Then mode = mode+1 If mode = 6 Then mode = 0 Select mode Case 0 Force# = 2000 Case 5 Force# = 200 Default Force# = 20 End Select EndIf ;Обновим положения всех объектов For ocu.Px_Cylinder = Each Px_Cylinder pxSetEntity(ocu\mesh, ocu\body) Next pxSetEntity(mesh1,body1) pxSetEntity(mesh2,body2) ; UpdateWorld RenderWorld Text 10,10,"Клавиши управления - прикладывают силу к красному кубику" Text 10,20,"Пробел - изменяет тип прикложеной силы" Text 10,30,"Текущий тип силы "+ mode Text 10,40,"Приложено силы "+ Force Flip Wend End |
К содержанию
Нажмите здесь чтобы увидеть последнюю версию этой странички в режиме online.